#ifndef VertexPosition2ColorTexture_h
#define VertexPosition2ColorTexture_h

#include <Defines.h>
#include <CSharpPropertyMethods.h>

// Riccsson includes.
#include <System/Object.h>
#include <System/Type.h>
#include <System/String.h>

// XNA includes.
#include "../../Color.h"
#include "../../Vector2.h"
#include "../Vertices/IVertexType.h"

namespace Riccsson
{
	namespace Xna
	{
		namespace Framework
		{
			namespace Graphics
			{
				// Forward declerations.
				class VertexDeclaration;

				//[StructLayout(LayoutKind.Sequential, Pack=1)]
				// This should really be XNA's VertexPositionColorTexture
				// but I'm not sure we want to use Vector3s if we don't have to.
				/*internal*/ struct VertexPosition2ColorTexture
					: public Riccsson::System::Object
					, public IVertexType
				{
					public: Vector2 Position;
					public: Color color;
					public: Vector2 TextureCoordinate;

					public: static /*readonly*/ GC_PTR<VertexDeclaration> vertexDeclaration;
		
					public: VertexPosition2ColorTexture ( Vector2 position, Color color_, Vector2 texCoord );
		
					public: static int GetSize();

					public: PROP3_GET(GC_PTR<VertexDeclaration>, vertexDeclaration)
					{
						throw; // Check the code under me. How can we use it?
					}
					// TODO: ???
					//VertexDeclaration IVertexType.VertexDeclaration
					//{
					//	get
					//	{
					//		return VertexDeclaration;
					//	}
					//}

					public: override int GetHashCode();
					public: override GC_PTR<Riccsson::System::string> ToString();
					public: override bool Equals(const Riccsson::System::object* obj);

					REGISTER_CLASS_NO_DEFAULT_CONSTRUCTOR(VertexPosition2ColorTexture)
				};

				bool operator ==(VertexPosition2ColorTexture& left, VertexPosition2ColorTexture& right);
				bool operator !=(VertexPosition2ColorTexture& left, VertexPosition2ColorTexture& right);

			}
		}
	}
}

#endif

